package com.company.demo04BSTCP;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TCPServer {
    public static void main(String[] args){
        try (// 1. 创建服务器端对象，并指定服务器端的端口号
             ServerSocket server = new ServerSocket(8080))
        {
            // 创建线程池，提高系统性能
            ThreadPoolExecutor pool = new ThreadPoolExecutor(3, 5, 5, TimeUnit.SECONDS,
                    new ArrayBlockingQueue<>(100), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
            while (true) {
                // 2. 使用ServerSocket对象的 accept 方法，获取与客户端连接的 Socket对象
                Socket socket = server.accept();
                // 将连接上的客户端 Socket 管道交给线程池处理
                // 由于 ServerThread 继承了 Thread 类，而 Thread 类在底层实现了 Runnable 接口，所以可以作为 Runnable 接口使用
                pool.execute(new ServerThread(socket));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}